struct Cacher<T>
    where T: Fn(u32) -> u32 {
    query: T,
    // 闭包，用于获取值
    value: Option<u32>, // 变量，用于存储值
}

// impl Cacher<T> where T: Fn(u32) -> u32 {
//     fn new(query: T) -> Cacher<T> {
//         Cacher { query, value: None }
//     }
//
//     fn value(&mut self, arg: u32) -> u32 {
//         match self.value {
//             Some(v) => v,
//             None => {
//                 let v = (self.query)(arg);
//                 self.value = Some(v);
//                 v
//             }
//         }
//     }
// }


fn fn_once<F>(func: F) where F: FnOnce(usize) -> bool + Copy {
    println!("fun3:{}", func(3));
    println!("fun4:{}", func(4));
}

#[test]
fn test() {
    let x = vec![1, 2, 3, 4];
    fn_once(|z| z == x.len());
}

